﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using SVC_BLL;
using SVC_DAL;
using ImprimeCupom;

namespace SVC.MOVIMENTACOES
{
    public partial class TrocaDeProdutos : Form
    {
        public TrocaDeProdutos()
        {
            InitializeComponent();
        }

        protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
        {
            if (keyData == Keys.Escape)
                this.Close();
            return base.ProcessCmdKey(ref msg, keyData);
        }

        public void carregaCombo()
        {
            try
            {
                Dados objD = new Dados();
                objD.preencheComboBox(cbProdutosTroca1, "Produtos", "pro_codigo", "pro_nome", "", "pro_nome");
                objD = null;

                objD = new Dados();
                objD.preencheComboBox(cbProdutos2, "Produtos", "pro_codigo", "pro_nome", "pro_quantidade > 0", "pro_nome");
                objD = null;

                objD = new Dados();
                objD.preencheComboBoxCliente(cbCliente, "Cliente", "cli_codigo", "Cliente", "", "Cliente");
                objD = null;
                
            }
            catch (Exception)
            {
                
                throw;
            }
        }

        public void limpar()
        {
            try
            {
                txtCodigoBarra1.Text = "";
                cbProdutosTroca1.SelectedIndex = -1;
                dgDados1.Rows.Clear();
                txtValorTotal1.Text = "";
                txtCodigoBarra2.Text = "";
                cbProdutos2.SelectedIndex = -1;
                dgDados2.Rows.Clear();
                txtValorTotal2.Text = "";
                txtTotalItens.Text = "";
                txtDescontoPercentual.Text = "";
                txtDescontoValor.Text = "";
                txtTotalFinal.Text = "";
                cbCliente.SelectedIndex = -1;
                txtQuantidade.Text = "";
            }
            catch (Exception)
            {
                
                throw;
            }
        }

        private void TrocaDeProdutos_Load(object sender, EventArgs e)
        {
            try
            {
                dgDados1.Columns.Add("pro_codigo", "Cod. do Produto");
                dgDados1.Columns.Add("pro_nome", "Produto");
                dgDados1.Columns.Add("vi_quantidade", "Quantidade");
                dgDados1.Columns.Add("vi_valorUnitario", "Valor Unitário");
                dgDados1.Columns.Add("vi_subtotal", "Subtotal");

                
                dgDados1.Columns[0].ReadOnly = true;
                dgDados1.Columns[1].ReadOnly = true;
                dgDados1.Columns[2].ReadOnly = false;
                dgDados1.Columns[3].ReadOnly = true;
                dgDados1.Columns[4].ReadOnly = true;

                dgDados1.Columns[0].Width = 100;
                dgDados1.Columns[1].Width = 200;
                dgDados1.Columns[2].Width = dgDados1.Width/5-60;
                dgDados1.Columns[3].Width = dgDados1.Width / 5-20;
                dgDados1.Columns[4].Width = dgDados1.Width / 5;

                dgDados2.Columns.Add("pro_codigo", "Cod. do Produto");
                dgDados2.Columns.Add("pro_nome", "Produto");
                dgDados2.Columns.Add("vi_quantidade", "Quantidade");
                dgDados2.Columns.Add("vi_valorUnitario", "Valor Unitário");
                dgDados2.Columns.Add("vi_subtotal", "Subtotal");

                dgDados2.Columns[0].ReadOnly = true;
                dgDados2.Columns[1].ReadOnly = true;
                dgDados2.Columns[2].ReadOnly = false;
                dgDados2.Columns[3].ReadOnly = true;
                dgDados2.Columns[4].ReadOnly = true;

                dgDados2.Columns[0].Width = 100;
                dgDados2.Columns[1].Width = 200;
                dgDados2.Columns[2].Width = dgDados2.Width / 5 - 60;
                dgDados2.Columns[3].Width = dgDados2.Width / 5 - 20;
                dgDados2.Columns[4].Width = dgDados2.Width / 5;

                //this.MaximumSize = new Size(this.Width, this.Height);
                this.MinimumSize = new Size(this.Width, this.Height);
                carregaCombo();
                limpar();
                
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }
        }

        private void txtCodigoBarra1_TextChanged(object sender, EventArgs e)
        {
            try
            {
                ProdutosBLL objPro = new ProdutosBLL();
                //if (cbProdutos.Text == "" || cbProdutos.Text == "System.Data.DataRowView")
                // objPro.localizarLeave("0", "pro_codigo");
                //  else
                //{
                objPro.localizarLeave(txtCodigoBarra1.Text, "pro_codigoBarra");

                //}

                if (objPro.pro_codigo != 0)
                {
                    cbProdutosTroca1.SelectedValue = objPro.pro_codigo;
                    //txtQuantidade.Text = objPro.pro_quantidade.ToString();
                    //txtValorUnitario.Enabled = true;
                    //txtQuantidade.Enabled = true;

                    //txtValorUnitario.Text = objPro.pro_precoCusto.ToString();
                    //if (txtQuantidade.Text != "")
                    //{
                    //    int qtd = int.Parse(txtQuantidade.Text);
                    //    Double valorUnitario = Double.Parse(txtValorUnitario.Text);
                    //    Double Subtotal = qtd * valorUnitario;

                    //    txtValorUnitario.Text = Convert.ToDouble(txtValorUnitario.Text).ToString("C");
                    //    txtSubtotal.ReadOnly = false;
                    //    txtSubtotal.Text = Subtotal.ToString();
                    //    txtSubtotal.Text = Convert.ToDouble(txtSubtotal.Text).ToString("C");
                    //    txtSubtotal.ReadOnly = true;
                    //}
                    //else if (txtValorUnitario.Text != "")
                    //    txtValorUnitario.Text = Convert.ToDouble(txtValorUnitario.Text).ToString("C");
                }
                else
                {
                    cbProdutosTroca1.SelectedIndex = -1;
                    //txtQuantidade.Text = "";
                    //txtValorUnitario.Text = "";
                    //txtQuantidade.Text = "";
                    //txtValorUnitario.Enabled = false;
                    //txtQuantidade.Enabled = false;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }
        }

        private void txtCodigoBarra2_TextChanged(object sender, EventArgs e)
        {
            try
            {
                ProdutosBLL objPro = new ProdutosBLL();
                //if (cbProdutos.Text == "" || cbProdutos.Text == "System.Data.DataRowView")
                // objPro.localizarLeave("0", "pro_codigo");
                //  else
                //{
                objPro.localizarLeave(txtCodigoBarra2.Text, "pro_codigoBarra");

                //}

                if (objPro.pro_codigo != 0)
                {
                    cbProdutos2.SelectedValue = objPro.pro_codigo;
                    txtQuantidade.Text = objPro.pro_quantidade.ToString();
                    //txtValorUnitario.Enabled = true;
                    //txtQuantidade.Enabled = true;

                    //txtValorUnitario.Text = objPro.pro_precoCusto.ToString();
                    //if (txtQuantidade.Text != "")
                    //{
                    //    int qtd = int.Parse(txtQuantidade.Text);
                    //    Double valorUnitario = Double.Parse(txtValorUnitario.Text);
                    //    Double Subtotal = qtd * valorUnitario;

                    //    txtValorUnitario.Text = Convert.ToDouble(txtValorUnitario.Text).ToString("C");
                    //    txtSubtotal.ReadOnly = false;
                    //    txtSubtotal.Text = Subtotal.ToString();
                    //    txtSubtotal.Text = Convert.ToDouble(txtSubtotal.Text).ToString("C");
                    //    txtSubtotal.ReadOnly = true;
                    //}
                    //else if (txtValorUnitario.Text != "")
                    //    txtValorUnitario.Text = Convert.ToDouble(txtValorUnitario.Text).ToString("C");
                }
                else
                {
                    cbProdutos2.SelectedIndex = -1;
                    txtQuantidade.Text = "";
                    //txtValorUnitario.Text = "";
                    //txtQuantidade.Text = "";
                    //txtValorUnitario.Enabled = false;
                    //txtQuantidade.Enabled = false;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }
        }

        private void btSalvar_Click(object sender, EventArgs e)
        {
            try
            {
                int desistiu = 0;
                if (MessageBox.Show("Tem certeza que deseja realizar a troca do produto?", "Troca", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1) == System.Windows.Forms.DialogResult.No)
                {
                    desistiu = 1;
                    goto desistir;
                }
                //Identificar os Produtos que estão sendo vendidos e subtrair a quantidade
                ProdutosBLL objPro2 = new ProdutosBLL();
                for (int j = 0; j < dgDados2.Rows.Count; j++)
                {
                    objPro2.localizar(dgDados2.Rows[j].Cells[0].Value.ToString(), "pro_codigo");
                    if (objPro2.pro_codigo > 0)
                    {
                        if (objPro2.pro_quantidade >= int.Parse(dgDados2.Rows[j].Cells[2].Value.ToString()))
                        {
                            objPro2.pro_quantidade -= int.Parse(dgDados2.Rows[j].Cells[2].Value.ToString());
                            objPro2.alterarQuantidade();
                        }
                        else
                        {
                            if (objPro2.pro_quantidade == 1)
                                throw new Exception("Só existe " + objPro2.pro_quantidade.ToString() + " unidade em estoque do produto " + objPro2.pro_nome);
                            else if (objPro2.pro_quantidade > 1)
                                throw new Exception("Só existem " + objPro2.pro_quantidade.ToString() + " unidades em estoque do produto " + objPro2.pro_nome);
                        }
                    }
                }
                objPro2 = null;

                //Identificar os produtos que estão sendo devolvidos e somar a quantidade
                ProdutosBLL objPro = new ProdutosBLL();
                for (int i = 0; i < dgDados1.Rows.Count; i++)
                {
                    objPro.localizar(dgDados1.Rows[i].Cells[0].Value.ToString(), "pro_codigo");
                    if (objPro.pro_codigo > 0)
                    {
                        objPro.pro_quantidade += int.Parse(dgDados1.Rows[i].Cells[2].Value.ToString());
                        objPro.alterarQuantidade();
                    }
                }
                objPro = null;

                 String x = "";
                for (int j = 0; j <= txtTotalFinal.Text.Length - 1; j++)
                {
                    if ((txtTotalFinal.Text[j] >= '0' &&
                    txtTotalFinal.Text[j] <= '9') ||
                    txtTotalFinal.Text[j] == ',')
                    {
                        x += txtTotalFinal.Text[j];
                    }
                }
                txtTotalFinal.Text = x;

                if (Double.Parse(txtTotalFinal.Text) > 0)
                {
                    //Criar uma nova venda
                    VendasBLL objVen = new VendasBLL();
                    vendaItensBLL objVI = new vendaItensBLL();



                    x = "";
                    for (int j = 0; j <= txtDescontoValor.Text.Length - 1; j++)
                    {
                        if ((txtDescontoValor.Text[j] >= '0' &&
                        txtDescontoValor.Text[j] <= '9') ||
                        txtDescontoValor.Text[j] == ',')
                        {
                            x += txtDescontoValor.Text[j];
                        }
                    }
                    txtDescontoValor.Text = x;

                    x = "";
                    for (int j = 0; j <= txtValorTotal1.Text.Length - 1; j++)
                    {
                        if ((txtValorTotal1.Text[j] >= '0' &&
                        txtValorTotal1.Text[j] <= '9') ||
                        txtValorTotal1.Text[j] == ',')
                        {
                            x += txtValorTotal1.Text[j];
                        }
                    }
                    txtValorTotal1.Text = x;

                    x = "";
                    for (int j = 0; j <= txtValorTotal2.Text.Length - 1; j++)
                    {
                        if ((txtValorTotal2.Text[j] >= '0' &&
                        txtValorTotal2.Text[j] <= '9') ||
                        txtValorTotal2.Text[j] == ',')
                        {
                            x += txtValorTotal2.Text[j];
                        }
                    }
                    txtValorTotal2.Text = x;

                    if (cbCliente.SelectedValue == null)
                        throw new Exception("Cliente não encontrado na base de dados, por favor, selecione um cliente válido");
                    objVen.cliente = int.Parse(cbCliente.SelectedValue.ToString());
                    objVen.data = DateTime.Now;
                    objVen.usuario = global.codUsuario;

                    FormaPagamentoVendas frm = new FormaPagamentoVendas();
                    frm.btCancelar.Visible = false;
                    frm.ShowDialog();
                    if (frm.cancelar)
                        objVen.limpar();
                    else
                    {
                        objVen.forma_pagamento = frm.formaPagamento;
                        objVen.parcelas = frm.qtdParcelas;
                    
                    frm = null;

                    objVen.valor = Double.Parse(txtValorTotal2.Text) - Double.Parse(txtValorTotal1.Text);
                    objVen.observacao = null;
                    Double desconto =0, percentual=0, valorFinal=0;
                    Double.TryParse(txtDescontoValor.Text, out desconto);
                    Double.TryParse(txtDescontoPercentual.Text, out percentual);
                    Double.TryParse(txtTotalFinal.Text,out valorFinal);

                    objVen.desconto = desconto;
                    objVen.percentual = percentual;
                    objVen.valorFinal = valorFinal;
                    objVen.ven_status = "Ativo";
                    objVen.ven_tipo = "Venda";

                    objVen.inserir();

                    //Produtos da venda
                    objVI.ven_codigo = objVen.codigo;
                    for (int i = 0; i < dgDados2.Rows.Count; i++)
                    {
                        objVI.pro_codigo = int.Parse(dgDados2.Rows[i].Cells[0].Value.ToString());
                        objVI.vi_quantidade = int.Parse(dgDados2.Rows[i].Cells[2].Value.ToString());

                        x = "";
                        for (int j = 0; j <= dgDados2.Rows[i].Cells[3].Value.ToString().Length - 1; j++)
                        {
                            if ((dgDados2.Rows[i].Cells[3].Value.ToString()[j] >= '0' &&
                            dgDados2.Rows[i].Cells[3].Value.ToString()[j] <= '9') ||
                            dgDados2.Rows[i].Cells[3].Value.ToString()[j] == ',')
                            {
                                x += dgDados2.Rows[i].Cells[3].Value.ToString()[j];
                            }
                        }
                        dgDados2.Rows[i].Cells[3].Value = x;

                        x = "";
                        for (int j = 0; j <= dgDados2.Rows[i].Cells[4].Value.ToString().Length - 1; j++)
                        {
                            if ((dgDados2.Rows[i].Cells[4].Value.ToString()[j] >= '0' &&
                            dgDados2.Rows[i].Cells[4].Value.ToString()[j] <= '9') ||
                            dgDados2.Rows[i].Cells[4].Value.ToString()[j] == ',')
                            {
                                x += dgDados2.Rows[i].Cells[4].Value.ToString()[j];
                            }
                        }
                        dgDados2.Rows[i].Cells[4].Value = x;

                        objVI.vi_valorUnitario = Double.Parse(dgDados2.Rows[i].Cells[3].Value.ToString());
                        objVI.vi_subtotal = Double.Parse(dgDados2.Rows[i].Cells[4].Value.ToString());
                        objVI.vi_desconto = 0;
                        objVI.vi_percentual = 0;

                        objVI.inserir();
                        //aqui
                    }


                    FormaPagamentoBLL objFP = new FormaPagamentoBLL();
                    objFP.localizar(objVen.forma_pagamento.ToString(), "fp_codigo");
                    if (objFP.fp_descricao != "Dinheiro")
                    {
                        ContasAReceberBLL objCR = new ContasAReceberBLL();
                        objCR.vendas = objVen.codigo;
                        objCR.excluirVenda();
                        objCR = null;
                        for (int i = 1; i <= objVen.parcelas; i++)
                        {
                            objCR = new ContasAReceberBLL();

                            objCR.vendas = objVen.codigo;
                            DateTime dtDataInicial = Convert.ToDateTime(DateTime.Now.ToString());
                            objCR.vencimento = dtDataInicial.AddMonths(i);
                            if (i == 1)
                            {
                                Double valor = Math.Round((objVen.valorFinal / objVen.parcelas), 2);
                                if (valor * objVen.parcelas < objVen.valorFinal)
                                {
                                    objCR.original = valor + 0.01;
                                    objCR.alterado = valor + 0.01;
                                }
                                else if (valor * objVen.parcelas > objVen.valorFinal)
                                {
                                    objCR.original = valor - 0.01;
                                    objCR.alterado = valor - 0.01;
                                }
                                else
                                {
                                    objCR.original = valor;
                                    objCR.alterado = valor;
                                }
                            }
                            else
                            {
                                objCR.original = Math.Round((objVen.valorFinal / objVen.parcelas), 2);
                                objCR.alterado = Math.Round((objVen.valorFinal / objVen.parcelas), 2);
                            }
                            objCR.pago = 0;
                            objCR.status = "Aberto";
                            objCR.pagamento = null;
                            objCR.juros = 0;
                            objCR.desconto = 0;
                            objCR.observacao = "";
                            objCR.parcela = i.ToString() + "/" + objVen.parcelas.ToString();
                            //objCR.duplicata = "";

                            objCR.inserir();
                            objCR = null;
                        }
                    }
                    else
                    {
                        ContasAReceberBLL objCR = new ContasAReceberBLL();
                        objCR.vendas = objVen.codigo;
                        objCR.excluirVenda();
                        objCR = null;
                        for (int i = 1; i <= objVen.parcelas; i++)
                        {
                            objCR = new ContasAReceberBLL();

                            objCR.vendas = objVen.codigo;
                            DateTime dtDataInicial = Convert.ToDateTime(DateTime.Now.ToString());
                            objCR.vencimento = dtDataInicial.AddMonths(i - 1);
                            if (i == 1)
                            {
                                Double valor = Math.Round((objVen.valorFinal / objVen.parcelas), 2);
                                if (valor * objVen.parcelas < objVen.valorFinal)
                                {
                                    objCR.original = valor + 0.01;
                                    objCR.alterado = valor + 0.01;
                                }
                                else if (valor * objVen.parcelas > objVen.valorFinal)
                                {
                                    objCR.original = valor - 0.01;
                                    objCR.alterado = valor - 0.01;
                                }
                                else
                                {
                                    objCR.original = valor;
                                    objCR.alterado = valor;
                                }
                            }
                            else
                            {
                                objCR.original = Math.Round((objVen.valorFinal / objVen.parcelas), 2);
                                objCR.alterado = Math.Round((objVen.valorFinal / objVen.parcelas), 2);
                            }
                            objCR.pago = objCR.original;
                            objCR.status = "Pago";
                            objCR.pagamento = DateTime.Now.Date;
                            objCR.juros = 0;
                            objCR.desconto = 0;
                            objCR.observacao = "";
                            objCR.parcela = i.ToString() + "/" + objVen.parcelas.ToString();
                            //objCR.duplicata = "";

                            //Impressão
                            String impressora = "LPT";
                            int tentativa = 0;
                            int COM = 0;
                        loop:
                            ImprimeTexto imp = new ImprimeTexto();
                            if (tentativa == 3)
                            {
                                COM++;
                                impressora = "COM";
                                imp.Inicio(impressora + tentativa.ToString());
                            }
                            else
                            {
                                tentativa++;
                                imp.Inicio(impressora + tentativa.ToString());
                            }
                            
                            imp.ImpLF(objCR.pago.ToString());
                            imp.ImpLF(objCR.status.ToString());
                            imp.ImpLF(objCR.pagamento.ToString());
                            imp.ImpLF(objCR.juros.ToString());
                            imp.ImpLF(objCR.desconto.ToString());
                            imp.ImpLF(objCR.observacao);
                            imp.ImpLF(objCR.parcela);

                            imp.Pula(10);
                            if (!imp.Fim())
                            {
                                //if (tentativa < 3)
                                //{
                                //    imp = null;
                                //    goto loop;
                                //}
                                if (COM < 5)
                                {
                                    imp = null;
                                    goto loop;
                                }
                                else
                                    throw new Exception("Nenhuma impressora foi localizada");
                            }


                            objCR.inserir();
                            objCR = null;
                        }
                        
                    }
                    objFP = null;
                    }

                    objVen.limpar();
                    objVI.limpar();
                    limpar();
                    
                    MessageBox.Show("Troca e venda de produtos realizada com sucesso", "Sucesso", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);


                    objVI = null;
                    objVen = null;
                }
                else
                {
                    //objPro2 = new ProdutosBLL();
                    //for (int i = 0; i < dgDados2.Rows.Count; i++)
                    //{
                    //    objPro2.localizar(dgDados2.Rows[i].Cells[0].Value.ToString(), "pro_codigo");
                    //    if (objPro2.pro_codigo > 0)
                    //    {
                    //        if (objPro2.pro_quantidade >= int.Parse(dgDados2.Rows[i].Cells[2].Value.ToString()))
                    //        {
                    //            objPro2.pro_quantidade -= int.Parse(dgDados2.Rows[i].Cells[2].Value.ToString());
                    //            objPro2.alterarQuantidade();
                    //        }
                    //        else
                    //        {
                    //            if (objPro2.pro_quantidade == 1)
                    //                throw new Exception("Só existe " + objPro2.pro_quantidade.ToString() + " unidade em estoque do produto " + objPro2.pro_nome);
                    //            else if (objPro2.pro_quantidade > 1)
                    //                throw new Exception("Só existem " + objPro2.pro_quantidade.ToString() + " unidades em estoque do produto " + objPro2.pro_nome);
                    //        }
                    //    }
                    //}
                    //objPro2 = null;
                    MessageBox.Show("Troca de produtos realizada com sucesso", "Sucesso", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
                }
                desistir:
                if(desistiu==1)
                    MessageBox.Show("Troca de produtos cancelada com sucesso", "Cancelado", MessageBoxButtons.OK, MessageBoxIcon.Information, MessageBoxDefaultButton.Button1);
                else
                limpar();   
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }
        }

        private void btCancelar_Click(object sender, EventArgs e)
        {
            try
            {
                limpar();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }
        }

        private void btIncluirProduto1_Click(object sender, EventArgs e)
        {
            try
            {
                String achou = "";

                if (cbProdutosTroca1.SelectedValue == null)
                    throw new Exception("Produto não encontrado na base de dados");

                //Verificar se já existe o produto inserido
                for (int i = 0; i < dgDados1.Rows.Count; i++)
                {
                    if (dgDados1.Rows[i].Cells[0].Value.ToString() == cbProdutosTroca1.SelectedValue.ToString())
                    {
                        ProdutosBLL objPro = new ProdutosBLL();
                        objPro.localizarLeave(cbProdutosTroca1.SelectedValue.ToString(), "pro_codigo");

                        
                        int qtd = int.Parse(dgDados1.Rows[i].Cells[2].Value.ToString());
                        String subtotal = "";
                        dgDados1.Rows[i].Cells[2].Value = qtd + 1;//Se existir o produto somar a quantidade
                        
                        String x = "";
                        for (int j = 0; j <= dgDados1.Rows[i].Cells[3].Value.ToString().Length - 1; j++)
                        {
                            if ((dgDados1.Rows[i].Cells[3].Value.ToString()[j] >= '0' &&
                            dgDados1.Rows[i].Cells[3].Value.ToString()[j] <= '9') ||
                            dgDados1.Rows[i].Cells[3].Value.ToString()[j] == ',')
                            {
                                x += dgDados1.Rows[i].Cells[3].Value.ToString()[j];
                            }
                        }
                        subtotal = x;


                        subtotal = (int.Parse(dgDados1.Rows[i].Cells[2].Value.ToString()) * Double.Parse(subtotal)).ToString();
                        subtotal = Convert.ToDouble(subtotal).ToString("C");
                        dgDados1.Rows[i].Cells[4].Value = subtotal;

                        achou = "Sim";
                    }
                }

                if (achou == "Sim")
                {
                    Double total = 0;
                    for (int k = 0; k < dgDados1.Rows.Count; k++)
                    {
                        String subtotal = dgDados1.Rows[k].Cells[4].Value.ToString();

                        String x = "";
                        for (int j = 0; j <= subtotal.Length - 1; j++)
                        {
                            if ((subtotal[j] >= '0' &&
                            subtotal[j] <= '9') ||
                            subtotal[j] == ',')
                            {
                                x += subtotal[j];
                            }
                        }
                        subtotal = x;

                        total += Double.Parse(subtotal);
                    }
                    txtValorTotal1.Text = total.ToString();
                    txtValorTotal1.Text = Convert.ToDouble(txtValorTotal1.Text).ToString("C");
                }

                if (achou != "Sim")//primeira vez que insere o produto na grid
                {
                    
                    ProdutosBLL objPro = new ProdutosBLL();
                    objPro.localizar(cbProdutosTroca1.SelectedValue.ToString(), "pro_codigo");
                    dgDados1.Rows.Add(objPro.pro_codigo, objPro.pro_nome,1, Convert.ToDouble(objPro.pro_precoVenda).ToString("C"), Convert.ToDouble(objPro.pro_precoVenda).ToString("C"));
                    objPro = null;
                    
                    Double total = 0;
                    for (int k = 0; k < dgDados1.Rows.Count; k++)
                    {

                        String valorUnitario = dgDados1.Rows[k].Cells[3].Value.ToString();

                        String x = "";
                        for (int j = 0; j <= valorUnitario.Length - 1; j++)
                        {
                            if ((valorUnitario[j] >= '0' &&
                            valorUnitario[j] <= '9') ||
                            valorUnitario[j] == ',')
                            {
                                x += valorUnitario[j];
                            }
                        }
                        valorUnitario = x;


                        String subtotal = Double.Parse(valorUnitario).ToString();

                        total += int.Parse(dgDados1.Rows[k].Cells[2].Value.ToString()) * Double.Parse(subtotal);
                        
                    }
                    txtValorTotal1.Text = total.ToString();
                    txtValorTotal1.Text = Convert.ToDouble(txtValorTotal1.Text).ToString("C");
                }

                if (dgDados2.Rows.Count > 0)
                {
                    Double totalRelativo = 0;
                    for (int k = 0; k < dgDados2.Rows.Count; k++)
                    {

                        String subtotal = dgDados2.Rows[k].Cells[4].Value.ToString();
                        String x = "";
                        for (int j = 0; j <= subtotal.Length - 1; j++)
                        {
                            if ((subtotal[j] >= '0' &&
                            subtotal[j] <= '9') ||
                            subtotal[j] == ',')
                            {
                                x += subtotal[j];
                            }
                        }
                        subtotal = x;

                        totalRelativo += Double.Parse(subtotal);
                    }


                    String valor1 = txtValorTotal1.Text;
                    String ValorX = "";
                    for (int j = 0; j <= valor1.Length - 1; j++)
                    {
                        if ((valor1[j] >= '0' &&
                        valor1[j] <= '9') ||
                        valor1[j] == ',')
                        {
                            ValorX += valor1[j];
                        }
                    }
                    valor1 = ValorX;
                   
                    txtTotalFinal.Text = (totalRelativo - Double.Parse(valor1)).ToString();
                    txtTotalFinal.Text = Convert.ToDouble(txtTotalFinal.Text).ToString("C");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }

        }

        private void btExcluirProduto1_Click(object sender, EventArgs e)
        {
            try
            {
                if (this.dgDados1.CurrentRow != null)
                {
                    this.dgDados1.Rows.Remove(this.dgDados1.CurrentRow);
                    if (dgDados1.Rows.Count == 1)
                        throw new Exception("Deve-se ter pelo menos 1 produto a ser devolvido");
                    if (dgDados1.Rows.Count > 0)
                    {
                        Double total = 0;
                        for (int k = 0; k < dgDados1.Rows.Count; k++)
                        {
                            String subtotal = dgDados1.Rows[k].Cells[4].Value.ToString();

                            String x = "";
                            for (int j = 0; j <= subtotal.Length - 1; j++)
                            {
                                if ((subtotal[j] >= '0' &&
                                subtotal[j] <= '9') ||
                                subtotal[j] == ',')
                                {
                                    x += subtotal[j];
                                }
                            }
                            subtotal = x;

                            total += Double.Parse(subtotal);
                        }
                        txtValorTotal1.Text = total.ToString();
                        txtValorTotal1.Text = Convert.ToDouble(txtValorTotal1.Text).ToString("C");

                    }
                    else
                    {
                        txtValorTotal1.Text = "0";
                        txtValorTotal1.Text = Convert.ToDouble(txtValorTotal1.Text).ToString("C");
                    }
                }

                int qtdade = 0;
                for (int i = 0; i < dgDados1.Rows.Count; i++)
                    qtdade += int.Parse(dgDados1.Rows[i].Cells[2].Value.ToString());

                Double totalRelativo = 0;
                for (int k = 0; k < dgDados2.Rows.Count; k++)
                {

                    String subtotal = dgDados2.Rows[k].Cells[4].Value.ToString();
                    String x = "";
                    for (int j = 0; j <= subtotal.Length - 1; j++)
                    {
                        if ((subtotal[j] >= '0' &&
                        subtotal[j] <= '9') ||
                        subtotal[j] == ',')
                        {
                            x += subtotal[j];
                        }
                    }
                    subtotal = x;

                    totalRelativo += Double.Parse(subtotal);
                }


                String valor1 = txtValorTotal1.Text;
                String ValorX = "";
                for (int j = 0; j <= valor1.Length - 1; j++)
                {
                    if ((valor1[j] >= '0' &&
                    valor1[j] <= '9') ||
                    valor1[j] == ',')
                    {
                        ValorX += valor1[j];
                    }
                }
                valor1 = ValorX;

                txtValorTotal2.Text = totalRelativo.ToString();
                txtTotalFinal.Text = (totalRelativo - Double.Parse(valor1)).ToString();

                txtValorTotal2.Text = Convert.ToDouble(txtValorTotal2.Text).ToString("C");
                txtTotalFinal.Text = Convert.ToDouble(txtTotalFinal.Text).ToString("C");

                txtDescontoPercentual.Text = "0";
                txtDescontoValor.Text = "0";
                txtDescontoValor.Text = Convert.ToDouble(txtDescontoValor.Text).ToString("C");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }
        }

        private void dgDados1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                int qtd = 0;
                int.TryParse(dgDados1.Rows[e.RowIndex].Cells[2].Value.ToString(),out qtd);
                if (qtd == 0)
                {
                    limpar();                    
                    throw new Exception("Quantidade deve ser um número inteiro maior do que 0");
                }
                else
                {

                    String subtotal = "";

                    String x = "";
                    for (int j = 0; j <= dgDados1.Rows[e.RowIndex].Cells[3].Value.ToString().Length - 1; j++)
                    {
                        if ((dgDados1.Rows[e.RowIndex].Cells[3].Value.ToString()[j] >= '0' &&
                        dgDados1.Rows[e.RowIndex].Cells[3].Value.ToString()[j] <= '9') ||
                        dgDados1.Rows[e.RowIndex].Cells[3].Value.ToString()[j] == ',')
                        {
                            x += dgDados1.Rows[e.RowIndex].Cells[3].Value.ToString()[j];
                        }
                    }
                    subtotal = x;


                    subtotal = (int.Parse(dgDados1.Rows[e.RowIndex].Cells[2].Value.ToString()) * Double.Parse(subtotal)).ToString();
                    subtotal = Convert.ToDouble(subtotal).ToString("C");
                    dgDados1.Rows[e.RowIndex].Cells[4].Value = subtotal;

                    for (int i = 0; i < dgDados1.Rows.Count; i++)
                    {
                        Double total = 0;
                        x = "";
                        for (int j = 0; j <= dgDados1.Rows[i].Cells[4].Value.ToString().Length - 1; j++)
                        {
                            if ((dgDados1.Rows[i].Cells[4].Value.ToString()[j] >= '0' &&
                            dgDados1.Rows[i].Cells[4].Value.ToString()[j] <= '9') ||
                            dgDados1.Rows[i].Cells[4].Value.ToString()[j] == ',')
                            {
                                x += dgDados1.Rows[i].Cells[4].Value.ToString()[j];
                            }
                        }
                        subtotal = x;

                        total += Double.Parse(subtotal);
                        txtValorTotal1.Text = total.ToString();
                    }
                    txtValorTotal1.Text = Convert.ToDouble(txtValorTotal1.Text).ToString("C");

                    Double totalRelativo = 0;
                    for (int k = 0; k < dgDados2.Rows.Count; k++)
                    {

                        String subtotal2 = dgDados2.Rows[k].Cells[4].Value.ToString();
                        x = "";
                        for (int j = 0; j <= subtotal2.Length - 1; j++)
                        {
                            if ((subtotal2[j] >= '0' &&
                            subtotal2[j] <= '9') ||
                            subtotal2[j] == ',')
                            {
                                x += subtotal2[j];
                            }
                        }
                        subtotal2 = x;

                        totalRelativo += Double.Parse(subtotal2);

                    }


                    String valor1 = txtValorTotal1.Text;
                    String ValorX = "";
                    for (int j = 0; j <= valor1.Length - 1; j++)
                    {
                        if ((valor1[j] >= '0' &&
                        valor1[j] <= '9') ||
                        valor1[j] == ',')
                        {
                            ValorX += valor1[j];
                        }
                    }
                    valor1 = ValorX;

                    txtValorTotal2.Text = totalRelativo.ToString();
                    txtTotalFinal.Text = (totalRelativo - Double.Parse(valor1)).ToString();

                    txtValorTotal2.Text = Convert.ToDouble(txtValorTotal2.Text).ToString("C");
                    txtTotalFinal.Text = Convert.ToDouble(txtTotalFinal.Text).ToString("C");
                    txtDescontoPercentual.Text = "0";
                    txtDescontoValor.Text = "0";
                    txtDescontoValor.Text = Convert.ToDouble(txtDescontoValor.Text).ToString("C");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }
        }

        private void cbProdutosTroca1_TextChanged(object sender, EventArgs e)
        {
            try
            {
                ProdutosBLL objPro = new ProdutosBLL();
                if (cbProdutosTroca1.Text == "" || cbProdutosTroca1.Text == "System.Data.DataRowView")
                    objPro.localizarLeave("0", "pro_codigo");
                else
                    objPro.localizarLeave(cbProdutosTroca1.Text, "pro_nome");
                    
                if (objPro.pro_codigo != 0)
                    txtCodigoBarra1.Text = objPro.pro_codigoBarra;                
                else
                    txtCodigoBarra1.Text = "";
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }
        }

        private void cbProdutos2_TextChanged(object sender, EventArgs e)
        {
            try
            {
                ProdutosBLL objPro = new ProdutosBLL();
                if (cbProdutos2.Text == "" || cbProdutos2.Text == "System.Data.DataRowView")
                    objPro.localizarLeave("0", "pro_codigo");
                else
                {
                    objPro.localizarLeave(cbProdutos2.Text, "pro_nome");
                    //txtQuantidadeTotal.Text = objPro.pro_quantidade.ToString();
                }

                if (objPro.pro_codigo != 0)
                    txtCodigoBarra2.Text = objPro.pro_codigoBarra;
                else
                    txtCodigoBarra2.Text = "";
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }
        }

        private void btIncluirProduto2_Click(object sender, EventArgs e)
        {
            try
            {
                String achou = "";
                if (dgDados1.Rows.Count == 0)
                    throw new Exception("Por favor, antes de inserir o produto que fará a troca, informe o produto que deseja devolver");

                if (cbProdutos2.SelectedValue == null)
                    throw new Exception("Produto não encontrado na base de dados");

                //Verificar se já existe o produto inserido
                for (int i = 0; i < dgDados2.Rows.Count; i++)
                {
                    if (dgDados2.Rows[i].Cells[0].Value.ToString() == cbProdutos2.SelectedValue.ToString())
                    {
                        ProdutosBLL objPro = new ProdutosBLL();
                        objPro.localizarLeave(cbProdutos2.SelectedValue.ToString(), "pro_codigo");


                        int qtd = int.Parse(dgDados2.Rows[i].Cells[2].Value.ToString());
                        String subtotal = "";

                        if (qtd < objPro.pro_quantidade)
                            dgDados2.Rows[i].Cells[2].Value = qtd + 1;//Se existir o produto somar a quantidade
                        else
                            throw new Exception("Não há mais unidades disponíveis do produto " + objPro.pro_nome);
                        

                        String x = "";
                        for (int j = 0; j <= dgDados2.Rows[i].Cells[3].Value.ToString().Length - 1; j++)
                        {
                            if ((dgDados2.Rows[i].Cells[3].Value.ToString()[j] >= '0' &&
                            dgDados2.Rows[i].Cells[3].Value.ToString()[j] <= '9') ||
                            dgDados2.Rows[i].Cells[3].Value.ToString()[j] == ',')
                            {
                                x += dgDados2.Rows[i].Cells[3].Value.ToString()[j];
                            }
                        }
                        subtotal = x;


                        subtotal = (int.Parse(dgDados2.Rows[i].Cells[2].Value.ToString()) * Double.Parse(subtotal)).ToString();
                        subtotal = Convert.ToDouble(subtotal).ToString("C");
                        dgDados2.Rows[i].Cells[4].Value = subtotal;

                        achou = "Sim";
                    }
                }

                if (achou == "Sim")
                {
                    Double total = 0;
                    for (int k = 0; k < dgDados2.Rows.Count; k++)
                    {
                        String subtotal = dgDados2.Rows[k].Cells[4].Value.ToString();

                        String x = "";
                        for (int j = 0; j <= subtotal.Length - 1; j++)
                        {
                            if ((subtotal[j] >= '0' &&
                            subtotal[j] <= '9') ||
                            subtotal[j] == ',')
                            {
                                x += subtotal[j];
                            }
                        }
                        subtotal = x;

                        total += Double.Parse(subtotal);
                    }
                    //txtValorTotal2.Text = total.ToString();
                    //txtValorTotal2.Text = Convert.ToDouble(txtValorTotal2.Text).ToString("C");
                }

                if (achou != "Sim")//primeira vez que insere o produto na grid
                {

                    ProdutosBLL objPro = new ProdutosBLL();
                    objPro.localizar(cbProdutos2.SelectedValue.ToString(), "pro_codigo");
                    dgDados2.Rows.Add(objPro.pro_codigo, objPro.pro_nome, 1, Convert.ToDouble(objPro.pro_precoVenda).ToString("C"), Convert.ToDouble(objPro.pro_precoVenda).ToString("C"));
                    objPro = null;

                    Double total = 0;
                    for (int k = 0; k < dgDados2.Rows.Count; k++)
                    {

                        String valorUnitario = dgDados2.Rows[k].Cells[3].Value.ToString();

                        String x = "";
                        for (int j = 0; j <= valorUnitario.Length - 1; j++)
                        {
                            if ((valorUnitario[j] >= '0' &&
                            valorUnitario[j] <= '9') ||
                            valorUnitario[j] == ',')
                            {
                                x += valorUnitario[j];
                            }
                        }
                        valorUnitario = x;


                        String subtotal = Double.Parse(valorUnitario).ToString();

                        total += int.Parse(dgDados2.Rows[k].Cells[2].Value.ToString()) * Double.Parse(subtotal);

                    }
                }

                
                    Double totalRelativo = 0;
                    int quantidade = 0;
                    for (int k = 0; k < dgDados2.Rows.Count; k++)
                    {   
                        
                        String subtotal = dgDados2.Rows[k].Cells[4].Value.ToString();
                        String x = "";
                        for (int j = 0; j <= subtotal.Length - 1; j++)
                        {
                            if ((subtotal[j] >= '0' &&
                            subtotal[j] <= '9') ||
                            subtotal[j] == ',')
                            {
                                x += subtotal[j];
                            }
                        }
                        subtotal = x;

                        totalRelativo += Double.Parse(subtotal);

                        quantidade += int.Parse(dgDados2.Rows[k].Cells[2].Value.ToString());

                    }
                    

                    String valor1 = txtValorTotal1.Text;
                    String ValorX = "";
                    for (int j = 0; j <= valor1.Length - 1; j++)
                    {
                        if ((valor1[j] >= '0' &&
                        valor1[j] <= '9') ||
                        valor1[j] == ',')
                        {
                            ValorX += valor1[j];
                        }
                    }
                    valor1 = ValorX;

                    txtTotalItens.Text = quantidade.ToString();
                    
                    txtValorTotal2.Text = totalRelativo.ToString();
                    txtTotalFinal.Text = (totalRelativo - Double.Parse(valor1)).ToString();
                    
                    txtValorTotal2.Text = Convert.ToDouble(txtValorTotal2.Text).ToString("C");
                    txtTotalFinal.Text = Convert.ToDouble(txtTotalFinal.Text).ToString("C");

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }
        }

        private void btExcluirProduto2_Click(object sender, EventArgs e)
        {
            try
            {
                if (this.dgDados2.CurrentRow != null)
                {
                    this.dgDados2.Rows.Remove(this.dgDados2.CurrentRow);
                    if (dgDados2.Rows.Count > 0)
                    {
                        Double total = 0;
                        for (int k = 0; k < dgDados2.Rows.Count; k++)
                        {
                            String subtotal = dgDados2.Rows[k].Cells[4].Value.ToString();

                            String x = "";
                            for (int j = 0; j <= subtotal.Length - 1; j++)
                            {
                                if ((subtotal[j] >= '0' &&
                                subtotal[j] <= '9') ||
                                subtotal[j] == ',')
                                {
                                    x += subtotal[j];
                                }
                            }
                            subtotal = x;

                            total += Double.Parse(subtotal);
                        }
                        //txtValorTotal2.Text = total.ToString();
                        //txtValorTotal2.Text = Convert.ToDouble(txtValorTotal2.Text).ToString("C");


                        Double totalRelativo = 0;
                        int quantidade = 0;
                        for (int k = 0; k < dgDados2.Rows.Count; k++)
                        {

                            String subtotal = dgDados2.Rows[k].Cells[4].Value.ToString();
                            String x = "";
                            for (int j = 0; j <= subtotal.Length - 1; j++)
                            {
                                if ((subtotal[j] >= '0' &&
                                subtotal[j] <= '9') ||
                                subtotal[j] == ',')
                                {
                                    x += subtotal[j];
                                }
                            }
                            subtotal = x;

                            totalRelativo += Double.Parse(subtotal);

                            quantidade += int.Parse(dgDados2.Rows[k].Cells[2].Value.ToString());

                        }


                        String valor1 = txtValorTotal1.Text;
                        String ValorX = "";
                        for (int j = 0; j <= valor1.Length - 1; j++)
                        {
                            if ((valor1[j] >= '0' &&
                            valor1[j] <= '9') ||
                            valor1[j] == ',')
                            {
                                ValorX += valor1[j];
                            }
                        }
                        valor1 = ValorX;

                        txtTotalItens.Text = quantidade.ToString();

                        txtValorTotal2.Text = totalRelativo.ToString();
                        txtTotalFinal.Text = (totalRelativo - Double.Parse(valor1)).ToString();

                        txtValorTotal2.Text = Convert.ToDouble(txtValorTotal2.Text).ToString("C");
                        txtTotalFinal.Text = Convert.ToDouble(txtTotalFinal.Text).ToString("C");


                    }
                    else
                    {
                        txtValorTotal2.Text = "0";
                        txtValorTotal2.Text = Convert.ToDouble(txtValorTotal2.Text).ToString("C");
                        txtTotalItens.Text = "0";
                        txtTotalFinal.Text = "0";
                        txtTotalFinal.Text = Convert.ToDouble(txtTotalFinal.Text).ToString("C");
                    }
                }

                int qtdade = 0;
                for (int i = 0; i < dgDados1.Rows.Count; i++)
                    qtdade += int.Parse(dgDados1.Rows[i].Cells[2].Value.ToString());
                
                txtDescontoPercentual.Text = "0";
                    txtDescontoValor.Text = "0";
                    txtDescontoValor.Text = Convert.ToDouble(txtDescontoValor.Text).ToString("C");

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }
        }

        private void dgDados2_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
            try
            {
                int qtd = 0;
                int.TryParse(dgDados2.Rows[e.RowIndex].Cells[2].Value.ToString(), out qtd);
                if (qtd == 0)
                {
                    limpar();
                    throw new Exception("Quantidade deve ser um número inteiro maior do que 0");
                }
                else
                {

                    String subtotal = "";

                    String x = "";
                    for (int j = 0; j <= dgDados2.Rows[e.RowIndex].Cells[3].Value.ToString().Length - 1; j++)
                    {
                        if ((dgDados2.Rows[e.RowIndex].Cells[3].Value.ToString()[j] >= '0' &&
                        dgDados2.Rows[e.RowIndex].Cells[3].Value.ToString()[j] <= '9') ||
                        dgDados2.Rows[e.RowIndex].Cells[3].Value.ToString()[j] == ',')
                        {
                            x += dgDados2.Rows[e.RowIndex].Cells[3].Value.ToString()[j];
                        }
                    }
                    subtotal = x;


                    subtotal = (int.Parse(dgDados2.Rows[e.RowIndex].Cells[2].Value.ToString()) * Double.Parse(subtotal)).ToString();
                    subtotal = Convert.ToDouble(subtotal).ToString("C");
                    dgDados2.Rows[e.RowIndex].Cells[4].Value = subtotal;

                    for (int i = 0; i < dgDados2.Rows.Count; i++)
                    {
                        Double total = 0;
                        x = "";
                        for (int j = 0; j <= dgDados2.Rows[i].Cells[4].Value.ToString().Length - 1; j++)
                        {
                            if ((dgDados2.Rows[i].Cells[4].Value.ToString()[j] >= '0' &&
                            dgDados2.Rows[i].Cells[4].Value.ToString()[j] <= '9') ||
                            dgDados2.Rows[i].Cells[4].Value.ToString()[j] == ',')
                            {
                                x += dgDados2.Rows[i].Cells[4].Value.ToString()[j];
                            }
                        }
                        subtotal = x;

                        total += Double.Parse(subtotal);
                        txtValorTotal2.Text = total.ToString();
                    }
                    txtValorTotal2.Text = Convert.ToDouble(txtValorTotal2.Text).ToString("C");

                    Double totalRelativo = 0;
                    int quantidade = 0;
                    for (int k = 0; k < dgDados2.Rows.Count; k++)
                    {   
                        
                        String subtotal2 = dgDados2.Rows[k].Cells[4].Value.ToString();
                        x = "";
                        for (int j = 0; j <= subtotal2.Length - 1; j++)
                        {
                            if ((subtotal2[j] >= '0' &&
                            subtotal2[j] <= '9') ||
                            subtotal2[j] == ',')
                            {
                                x += subtotal2[j];
                            }
                        }
                        subtotal2 = x;

                        totalRelativo += Double.Parse(subtotal2);

                        quantidade += int.Parse(dgDados2.Rows[k].Cells[2].Value.ToString());
                    }
                    

                    String valor1 = txtValorTotal1.Text;
                    String ValorX = "";
                    for (int j = 0; j <= valor1.Length - 1; j++)
                    {
                        if ((valor1[j] >= '0' &&
                        valor1[j] <= '9') ||
                        valor1[j] == ',')
                        {
                            ValorX += valor1[j];
                        }
                    }
                    valor1 = ValorX;

                    txtTotalItens.Text = quantidade.ToString();
                    
                    txtValorTotal2.Text = totalRelativo.ToString();
                    txtTotalFinal.Text = (totalRelativo - Double.Parse(valor1)).ToString();
                    
                    txtValorTotal2.Text = Convert.ToDouble(txtValorTotal2.Text).ToString("C");
                    txtTotalFinal.Text = Convert.ToDouble(txtTotalFinal.Text).ToString("C");
                    txtDescontoPercentual.Text = "0";
                    txtDescontoValor.Text = "0";
                    txtDescontoValor.Text = Convert.ToDouble(txtDescontoValor.Text).ToString("C");
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }
        }

        private void txtDescontoPercentual_Enter(object sender, EventArgs e)
        {
            txtDescontoPercentual.SelectAll();
        }

        private void txtDescontoPercentual_KeyPress(object sender, KeyPressEventArgs e)
        {
            try
            {
                if ((e.KeyChar < '0' || e.KeyChar > '9') &&
              (e.KeyChar != ',' && e.KeyChar != '.' &&
               e.KeyChar != (Char)13 && e.KeyChar != (Char)8))
                {
                    e.KeyChar = (Char)0;
                }
                else
                {
                    if (e.KeyChar == '.' || e.KeyChar == ',')
                    {
                        if (!txtDescontoPercentual.Text.Contains(','))
                        {
                            e.KeyChar = ',';
                        }
                        else
                        {
                            e.KeyChar = (Char)0;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            } 
        }

        private void txtDescontoPercentual_Leave(object sender, EventArgs e)
        {
            try
            {
                Double percentual = 0, desconto = 0, subtotal = 0, valorTotal = 0;
                //int quantidade = 0;
                if (txtDescontoPercentual.Text != "")
                    percentual = Double.Parse(txtDescontoPercentual.Text);
                String x = "";
                for (int i = 0; i <= txtDescontoValor.Text.Length - 1; i++)
                {
                    if ((txtDescontoValor.Text[i] >= '0' &&
                    txtDescontoValor.Text[i] <= '9') ||
                    txtDescontoValor.Text[i] == ',')
                    {
                        x += txtDescontoValor.Text[i];
                    }
                }
                if (x != "")
                    desconto = Double.Parse(x);


                x = "";
                for (int i = 0; i <= txtValorTotal2.Text.Length - 1; i++)
                {
                    if ((txtValorTotal2.Text[i] >= '0' &&
                    txtValorTotal2.Text[i] <= '9') ||
                    txtValorTotal2.Text[i] == ',')
                    {
                        x += txtValorTotal2.Text[i];
                    }
                }
                if (x != "")
                    valorTotal = Double.Parse(x);

                x = "";
                for (int i = 0; i <= txtValorTotal1.Text.Length - 1; i++)
                {
                    if ((txtValorTotal1.Text[i] >= '0' &&
                    txtValorTotal1.Text[i] <= '9') ||
                    txtValorTotal1.Text[i] == ',')
                    {
                        x += txtValorTotal1.Text[i];
                    }
                }
                if (x != "")
                    valorTotal -= Double.Parse(x);



                //if (txtTotalItens.Text != "")
                //    quantidade = int.Parse(txtTotalItens.Text);

                subtotal = valorTotal - valorTotal * percentual / 100;
                txtTotalFinal.Text = Convert.ToDouble(subtotal).ToString("C");
                txtDescontoValor.Text = Convert.ToDouble(valorTotal * percentual / 100).ToString("C");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            }
        }

        private void txtDescontoValor_Enter(object sender, EventArgs e)
        {
            String x = "";
            for (int i = 0; i <= txtDescontoValor.Text.Length - 1; i++)
            {
                if ((txtDescontoValor.Text[i] >= '0' &&
                txtDescontoValor.Text[i] <= '9') ||
                txtDescontoValor.Text[i] == ',')
                {
                    x += txtDescontoValor.Text[i];
                }
            }
            txtDescontoValor.Text = x;
            txtDescontoValor.SelectAll();
        }

        private void txtDescontoValor_KeyPress(object sender, KeyPressEventArgs e)
        {
            try
            {
                if ((e.KeyChar < '0' || e.KeyChar > '9') &&
              (e.KeyChar != ',' && e.KeyChar != '.' &&
               e.KeyChar != (Char)13 && e.KeyChar != (Char)8))
                {
                    e.KeyChar = (Char)0;
                }
                else
                {
                    if (e.KeyChar == '.' || e.KeyChar == ',')
                    {
                        if (!txtDescontoValor.Text.Contains(','))
                        {
                            e.KeyChar = ',';
                        }
                        else
                        {
                            e.KeyChar = (Char)0;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            } 
        }

        private void txtDescontoValor_Leave(object sender, EventArgs e)
        {
            try
            {
                Double percentual = 1, subtotal = 0, desconto = 0, ValorTotal = 0;
                //int quantidade = 0;


                String x = "";
                for (int i = 0; i <= txtDescontoValor.Text.Length - 1; i++)
                {
                    if ((txtDescontoValor.Text[i] >= '0' &&
                    txtDescontoValor.Text[i] <= '9') ||
                    txtDescontoValor.Text[i] == ',')
                    {
                        x += txtDescontoValor.Text[i];
                    }
                }
                if (x != "")
                    desconto = Double.Parse(x);
                txtDescontoValor.Text = x;

                x = "";
                for (int i = 0; i <= txtValorTotal2.Text.Length - 1; i++)
                {
                    if ((txtValorTotal2.Text[i] >= '0' &&
                    txtValorTotal2.Text[i] <= '9') ||
                    txtValorTotal2.Text[i] == ',')
                    {
                        x += txtValorTotal2.Text[i];
                    }
                }
                if (x != "")
                    ValorTotal = Double.Parse(x);

                x = "";
                for (int i = 0; i <= txtValorTotal1.Text.Length - 1; i++)
                {
                    if ((txtValorTotal1.Text[i] >= '0' &&
                    txtValorTotal1.Text[i] <= '9') ||
                    txtValorTotal1.Text[i] == ',')
                    {
                        x += txtValorTotal1.Text[i];
                    }
                }
                if (x != "")
                    ValorTotal -= Double.Parse(x);

                //if (txtQuantidade.Text != "")
                    //quantidade = int.Parse(txtQuantidade.Text);

                txtDescontoPercentual.Text = (desconto * 100 / ValorTotal).ToString();
                percentual = Double.Parse(txtDescontoPercentual.Text);
                subtotal = ValorTotal - ValorTotal * percentual / 100;
                txtTotalFinal.Text = Convert.ToDouble(subtotal).ToString("C");

                txtDescontoPercentual.Text = Math.Round(Double.Parse(txtDescontoPercentual.Text), 2).ToString();

                if (txtDescontoValor.Text != "")
                    txtDescontoValor.Text = Convert.ToDouble(txtDescontoValor.Text).ToString("C");


            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            } 
        }

        private void btInserirCliente_Click(object sender, EventArgs e)
        {
            try
            {
                CADASTROS.Cliente frm = new CADASTROS.Cliente();
                frm.ShowDialog();
                frm = null;

                Dados objD = new Dados();
                objD.preencheComboBoxCliente(cbCliente, "Cliente", "cli_codigo", "Cliente", "", "Cliente");
                objD = null;
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "Erro", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1);
            } 
        }
    
    }
}
